Query Execution 1

Processing Models

Defines how the system executes a query plan.

Iterator Model

Also the Volcano or the Pipeline Model

Each query plan operator implements a Next() function.

类似于一些编程语言中的迭代器(,iterator,)

Iterator Model 图示

Materialization Model

Each operator processes its input all at once and then emits its output all at once.

Materialization Model 图示

Better for OLTP workloads because queries only access a small number of tuples at a time.

Not good for OLAP queries with large intermediate results.

适用于访问少量数据的场景。

Vectorization Model

迭代器(,Iterator,)模型类似,每个操作符(,operator,)都实现自己的 Next() 函数,但是与迭代器模型每次只返回一个 tuple 不同,向量化(,Vectorization,)模型每次返回多个 tuple。

Vectorization Model 图示

向量化模型是迭代器模型和 Materialization 模型的折中版本。

向量化模型相对于迭代器模型大幅减少了函数调用次数,这使得它很适合 OLAP 查询的场景。

可以使用向量化的质量(如 SIMD)来处理批量的数据。

Plan Processing Direction

Approach #1: Top-to-Bottom

Approach #2: Bottom-to-Top

Access Methods

Sequencial Scan

Pseudo-code:

for page in table.pages:
  for t in page.tuples:
    if evalPred(t):
      // Do Something!

DBMS 会维护一个指向上次最后遍历到的位置的内部指针。

Optimization: Data Skipping

Approximate Queries (Lossy)

Execute queries on a sampled subset of the entire table to produce approximate results.

Zone Maps (Lossless)

提前计算一个 page 的每一列的聚合数据(最大值、最小值、平均值等),在执行查询时通过这些聚合数据来决定是否访问遍历这一个 page 的数据。

Index Scan

Multi-Index Scan

当一个查询涉及多条属性时,使用数据对应的多个索引根据条件获取相应的数据集合后,进行取并集 OR 取交集获得最终结果。

Modification Queries

UPDATE/DELETE:

INSERT:

Halloween Problem

当更新某个 tuple 的数据时,被更新的数据又重新满足更新条件,从而导致这些数据被多次更新。

可以通过记录更新过的 tuple 的 id 来避免。

Halloween Problem 的例子

Expression Evaluation

点此查看原文